package com.dudu.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dudu.dto.ResultDto;
import com.dudu.model.User;
import com.dudu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @Author: 小河
 * @Description:
 * @Date: 2024-07-10 16:17:56
 * @Version: 1.0
 */
@SaCheckLogin
@RestController // 标识这是一个RESTful控制器
@RequestMapping("/user") // 定义此控制器的基本请求路径
public class UserController {

    @Autowired // 自动注入UserService实例
    private UserService userService;

    /**
     * 用户注册方法
     *
     * @param user 包含用户注册信息的User对象
     * @return 注册结果的消息
     */
    @SaIgnore
    @PostMapping("/register") // 处理POST请求，路径为 /api/user/register
    public ResultDto register(@RequestBody User user) { // 从请求体中获取User对象
        QueryWrapper<User> wrapper = new QueryWrapper<User>()
                .eq("username",user.getUsername())
                .eq("user_phone",user.getUserPhone());
        User isExisUser = userService.getOne(wrapper);
        // 保存新用户
        if ( isExisUser != null){

            StpUtil.login(isExisUser.getUserId());

            return ResultDto.error("用户已存在",null);
        }
         userService.saveOrUpdate(user);
//        userService.saveUser(user);
        return ResultDto.success("注册成功",null);
    }

    /**
     * 用户登录方法
     *
     * @param user 包含用户登录信息的User对象
     * @return 登录结果的消息
     */
    @PostMapping("/login") // 处理POST请求，路径为 /api/user/login
    public SaResult login(@RequestBody User user) { // 从请求体中获取User对象
        System.out.println("Username: " + user.getUsername());
        System.out.println("Password: " + user.getPassword());
        // 验证用户名和密码
        QueryWrapper<User> wrapper = new QueryWrapper<User>()
                .eq("username",user.getUsername())
                .eq("password",user.getPassword());
        user = userService.getOne(wrapper);

        if (user !=null){
            StpUtil.login(user.getUserId());
//            return SaResult.ok("欢迎您【"+user.getUsername()+"】").setData(user);
            return SaResult.data(user);
//            return ResultDto.success("登陆成功",user);
        }
        return SaResult.error("登录失败");
    }

    /**
     * 退出登录
     * @param userId
     * @return SaResult
     */

    @GetMapping("outLogin/{userId}")
    public SaResult outLogin(@PathVariable Integer userId){
        try{
            if (userId!=null){
                StpUtil.logout(userId);
                return SaResult.ok("退出成功");
            }else {
                return SaResult.error("用户ID为空！");
            }
        }catch (Exception e){
            e.printStackTrace();
            return SaResult.error("系统出错请联系管理员").setData(e.getMessage());
        }
    }
}




